home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-06-08 | 53.2 KB | 1,231 lines |
- Path: uunet!zephyr.ens.tek.com!tekred!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v10i016: umoria3 - single player dungeon simulation (ver. 5.2), Patch1b
- Message-ID: <5723@tekred.CNA.TEK.COM>
- Date: 5 Jun 90 16:39:04 GMT
- Sender: news@tekred.CNA.TEK.COM
- Lines: 1220
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: wilson@ernie.Berkeley.EDU (Jim Wilson)
- Posting-number: Volume 10, Issue 16
- Archive-name: umoria3/Patch1b
- Patch-To: umoria3: Volume 9, Issue 55-86
-
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 2 (of 3)."
- # Contents: mac/MakeFile.hqx mac/dumpres/MakeFile.hqx
- # mac/scrnmgr/ScrnMgr.doc source/player.c
- # Wrapped by wilson@atlas on Wed May 30 14:20:00 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'mac/MakeFile.hqx' -a "${1}" != "-c" ; then
- mv -f mac/MakeFile.hqx mac/MakeFile.hqx.old
- fi
- echo shar: Extracting \"'mac/MakeFile.hqx'\" \(8517 characters\)
- sed "s/^X//" >'mac/MakeFile.hqx' <<'END_OF_FILE'
- X(This file must be converted with BinHex 4.0)
- X:#%eKDf9'D@aP!&4&@&408&-J!3!!!"E0!!!"IRGE3dp`G'P[ER-J23N*,@)b)#e
- Xc)(Y%C@CKG@adI5!YC#"038-J,@eLCb"[EL!YFhPY)'pZ$3e5Fh*M6h"dD@pZFb!
- Xp#5eL-L!YE5!YC#"58e*$)#eN)%e"3`d0,Q-ZE`N*#F3*,Q-0#AY$I5"l3dp`G'P
- X[ER0p)(Y%CA"%DA*pHd4PCQ&eE(4p,Q-J,@mJHe4KFQG%DA*pHd4PCQ&eE(4p,Q-
- XZE`d*$5jbFh*M,Qm*#3R%#5jM$3Pl3hdJHe*cFQ02F(4TEfjcI5"l4'9`4'PbIAY
- X%C@CKG@adI5jM)#e[)(Y8BA*R4'PbIAY%C@CKG@adI5jbFh*M,Qm0#3e2BQTPBh4
- Xc)$d*#@eKBbjM,QmJYJd*#3N*E@&MBfpZCLjM,QmJYJd*#3N*E@&MD'9XF#jM,Qm
- XJYJd*#3N*E@&MFf0[FQ8ZBbj[),B0#3N*#@eKBh*cFQ-ZBbj[),B0#3N*#@eKD@i
- XZBbj[),B0#3N*#@0bC@&dC5jM,QmJYJd*#3N*Bh*PBA4eFQ8ZBbj[),B0#3N*#@4
- XPBA4S,Q-ZEb#f$3N*#3PNCA0M,Q-ZEb#f$3N*#3PNG@jRC@pZ,Q-ZEb#f$3N*#3P
- XPBA3ZBbj[),B0#3N*#@CTE'9c,Q-ZEb#f$3N*#3PRC@jPFQ&dC5jM,QmJYJd*#3N
- X*D'9XF#jM,QmJYJd*#3N*E@&MD@mZBbj[),B0#3N*#@eKCfPM,Q-ZEb#f$3N*#3P
- XYDA0M-5jM,QmJYJd*#3N*E@PcBc)ZBbj[),B0#3N*#@e[ER0dCA*c,Q-ZEb#f$3N
- X*#3PYEh*TB6%ZBbj[),B0#3N*#@e[FQPK-LjM,QmJYJd*#3N*F'aKH@9b,Q-ZEb#
- Xf$3N*#3P`Eh4TEfjc,Q-ZEb#f$3N*#3P`FQ&jCA)ZBbj[),B0#3N*#A*PBf&XE#j
- XM,QmJYJd*#3N*FQjN,Q-ZEb#f$3N*#3PcBACP,Q-ZEb#f$3N*#3PcBh*[E'ac,Q-
- XZEb#f$3N*#3PcCA4c,Q-ZEb#f$3N*#3PcD@GZB@ac,Q-ZEb#f$3N*#3PcF'9XE(-
- XZBbj[),B0#3N*#A0dB@CQFbjM,QmJYJd*#3N*Fh4[FQ8a,Q-ZEb#f$3N*#3PcG'p
- XbC6)ZBbj[),B0#3N*#A4KBQaPFbjM,QmJYJd*#3N*G(*PBA0eFQ8ZBbj[),B0#3N
- X*#A9ZC'9Q,Q-ZEb#f$3N*#3PfBA*TB@*XC5jM,QmJYJd*#3N*Gf&ZC(-ZBbj[),B
- X0#3N*#AGTHQ&bC#jM,Qm0#3N*#3e5Fh*MFb!p#3N*E@&MC'&dB5jbFh*M,QmJYJd
- X*#3N*E@&MFR0bBbjbFh*M,QmJYJd*#3N*E@pZFh4PFR-ZFR0bBbj[),B0#3N*#A"
- XXBAPPFLjbFh*M,QmJYJd*#3N*G'&LE'9c,R*cFQ-ZEb#f$3N*#3PdFQ9KFh9bC5j
- XbFh*M,QmJYJd*#3N*GQ&bD@&LE'8ZFR0bBbj[$3N*#3N09'9iG(-J23N*#@jPGh-
- XJYJd*#3N*Eh*TCf0YC(-ZD'a`),B0#3N*#@phDATME@4c,QKXF##f$3N*#3PbEfG
- XXBfeNFbjSE(!JYJd*#3N*FRGTHQ0YC(-ZD'a`),B0#3N*#ACPFR0TEfiZD'a`),B
- X0#3N*#AGPE'0[E@8ZD'a`$3N*#3N0)b"+9cSJ3e*eER4TE@8ZEb"KEQ3J3dPZG'9
- XbCQ&MC5j[)'4PE'9dC@3JBA-J55"hBA-JG'pXC#"dD'&d)(4SCANJBA*P)'pLFfp
- XXCA4P$8e[FQPK#3N*a-3*He*cFQ0cI3d*6'PZDb!YE@&`)#eh)#ed)#G08&08*b!
- XYBb!R69"6)#Hf$3N*,A0c)$)`-$!`-#!YFh*d),B0#3Pl8R0bBh0p),B0#3NLHd0
- X-D@*bBA*TCA0p)N4eEA"5CA-ZEb#f$3N*)RY-D@*bBA*TCA0p)R0dG@*c,QmJYJd
- X*#5*l6'PLFQ&bD@9cI5*5G@jdD@eP,QmJYJd*#5*l6'PLFQ&bD@9cI5**ER4PFQC
- XKBf8ZEb#f$3N*)RY$6'PLFQ&bD@9cI5*6G'4$6'PL,QmJYJd*#5*l3daTBR*KFQP
- XPFhdL3e0"6N9-D@)ZEb#f$3N*)RY$6'PLFQ&bD@9cI5*0BA4S,QmJYJd*#5*l6'P
- XLFQ&bD@9cI5*8EfpX6'PLFbj[),B0#3Nq)'eKBf4KG'%ZE@&`$3P-D@jV,NpeG#"
- X0Eh*TB3d*4'9XCA4P)%aTEQXZ6h9d$3e0Eh*TB5!*#3R%a#!*HdpLDQ9MG(0p$3P
- X-D@jV)#eYBA!J,AFJ,A3J*d&38%`R)#eM)#G08NP"*lB0#3NYH#"YEh*TB5jiFQ9
- XQ),B0#3NYFhPY)'pZ),B0#3NYEb"0Eh*TB5#f$3N*,A*K)$de-L#f$3N*,A0R)%e
- XKD@ipE@&M,'eKD@iXFQjN,(0TCfjKE(-XG@jNC@BXE@&MFR0bBb#f$3N*,A*K)%e
- XKD@ip06)JYJd*#5ecCb"*6ceYB@0TEb#f$3N*,A*K)%P2268b),B0#3NYFfFJ3A"
- X`6@9ZG6eYB@0SC@a`,'eKBf0[EQBXE@&MFf0[FQ8JYJd*#5ebB5""F("0C@je26-
- Xb),B0#3NYFfFJ3h*PBA4P2@0bC@&dC5#f$3N*,A*K)%0bC@&dC6dc-L#f$3N*,A0
- XR)%0bC@&dGA*P2@0bC@&dGA*P),B0#3NYFQ%J3h*PBA4eFQ8p-c)JYJd*#5ecCb"
- X%C@&dD$eNC@&dD##f$3N*,A*K)%4PBA4S26-b),B0#3NYFfFJ4(9ZCf9[EMeNG@j
- XRC@pZ),B0#3NYFQ%J4(9ZCf9[EMde-L#f$3N*,A0R)%9KG$ePBA3JYJd*#5ebB5"
- X&BA3p-c)JYJd*#5ecCb"'D@aPFceQD@aPFb#f$3N*,A*K)%CTE'9c26-b),B0#3N
- XYFfFJ4f9ZCA*KG'8pCf9ZCA*KG'8JYJd*#5ebB5"(C@jPFQ&dC6dc-L#f$3N*,A0
- XR)%KPE(!pD'9XF##f$3N*,A*K)%KPE(!p-c)JYJd*#5ecCb"0B@GTBceYB@GTBb#
- Xf$3N*,A*K)%eKCfPM26-b),B0#3NYFfFJ6@PcBc%pE@PcBc%XC'9cBbacCA4c),B
- X0#3NYFQ%J6@PcBc%p06)JYJd*#5ecCb"0DA0M-MeYDA0M-L#f$3N*,A*K)%eTFf-
- Xb268b),B0#3NYFfFJ6@pbD@%a2@e[FQPK-5#f$3N*,A*K)%e[FQPK-6de-L#f$3N
- X*,A0R)%e[FQPK-MeYEh*TB6)JYJd*#5ebB5"0Eh*TB6)p06)JYJd*#5ecCb"3FQ&
- XjCA)pF(*KH@9b),B0#3NYFQ%J8(*KH@9b26-b),B0#3NYFfFJ8'pdD@pZFce`Eh4
- XTEfjc),B0#3NYFQ%J8'pdD@pZFcdc-L#f$3N*,A0R)&*PBf&XE$ebC@0KE'`JYJd
- X*#5ebB5"5C@0KE'`p-c)JYJd*#5ecCb"6BACP2A0KGQ8JYJd*#5ebB5"6BACP26-
- Xb),B0#3NYFfFJ8f0bEfaXFcecBh*[E'ac),B0#3NYFQ%J8f0bEfaXFcdc-L#f$3N
- X*,A0R)&0`C@aXFcecF'9XE(-JYJd*#5ebB5"6F'9XE(-p06)JYJd*#5ecCb"6G'&
- XQCR-pFh4KCQCc),B0#3NYFQ%J8h4KCQCc26-b),B0#3NYFfFJ8h4[FQ8pFh4[FQ8
- Xa,(0dEh*P-L#f$3N*,A*K)&0dEh*P26-b),B0#3NYFfFJ9f&ZC(-pGf&ZC(-JYJd
- X*#5ebB5"AB@jNFcdc-L#f$3N*,A0R)>HQ&bC$ehDATKFQ3JYJd*#5ebB5"ADAT
- XKFQ3p-c)JYJd*#AY2BQTPBh4cI5#f$3N*)RY$6'PLFQ&bD@9cI5*6Bh*Z6@Gb,Qm
- XJYJd*#5*l3daTBR*KFQPPFhdL4(9YF&*PFbj[),B0#3NLHd0-D@*bBA*TCA0p)N0
- X5G@jdD@eP,QmJYJd*#5*l6'PLFQ&bD@9cI5**ER4PFQCKBf8ZEb#f$3N*)RY$6'P
- XLFQ&bD@9cI5*6G'4$6'PL,QmJYJd*#5*l3daTBR*KFQPPFhdL3e0"6N9-D@)ZEb#
- Xf$3N*)RY$6'PLFQ&bD@9cI5*0BA4S,QmJYJd*#5*l3daTBR*KFQPPFhdL3dPZG'9
- XbCQ&MC5j[),B0#3Nq)'e[FQPK,QeKF!d*8f9d4QPXC5!YB5"#)%e[FQPK$3e0Eh*
- XTB3N*#F6%#@e[FQPK,R)0#9*PHL"YEh*TB5jb)#eKF("PEQ3J,@mJ6@pbD@%J,A-
- XJHe**EQ0XG@4PFhd0#3e0Eh*TB3N*#F6%#AY8CAKdFhd0#8C[FL"'D@aP6Q&YC5"
- XTEL"l9'9iG(0p$3N*5@BJ)RY'D@aP6Q&YCAdL)$eq)#r&1LM&+DJa,`d*#3P&BfK
- X[)#)MHkJaI5)0#3P&E(0P$3N*#89MD'mJ)L0l4QPXC8jKE@9p)Jd*#89ZC!d*#80
- XKG'9ZBA4P)#*l4QPXC8jKE@9p)Jd*4@jN)(`J4@jdB@)J,@3J1#!YG#!`)$iJ6@p
- XbD@%0#90PG%CTE'8J,@-J*de558%R)#ed)#G"8&"-*b"0Eh*TB3d*$5-J4QPXCA-
- XJGbp[)#)ZD#)JC'9`C@jNC@jMD@9c)#dY$5-*E@&MBfpZCLjM$5-*E@&MD'9XF#j
- XM$3eYB@-ZBbj[#3N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9iG'9
- XbER-ZD#"YB@0bFh*M,QJ0E@&MFf0[FQ8ZBbj[#3R%#@0[ER0dB@jd,QJJBfpZCQP
- XR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0E@&MFR0bBbjM,Qm*#3R%#@0[ER0dB@jd,QJ
- XJBfpZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJJE@&MFR0bBbjS$3eYB@PZ,Q-ZE`N
- X*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!eMFQ9KG'8
- XZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbjS$@0
- XbC@&dGA*P,Q-ZE`N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*
- XZFbjS$@4PBA4S,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9
- XiG'9bER-ZD!eNCA0M,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbj
- XS)'9iG'9bER-ZD!eNG@jRC@pZ,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"
- XdHA"PFbjS)'9iG'9bER-ZD!ePBA3ZBbj[#3N*#F3*BfpZFh4KER3ZD#"MEfjQD@F
- XZD#"dHA"PFbjS)'9iG'9bER-ZD!eQD@aPFbjM,Qm*#3R%#@0[ER0dB@jd,QJJBfp
- XZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0Cf9ZCA*KG'8ZBbj[#3R%#@0[ER0dB@j
- Xd,QJJBfpZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0D'9XF#jM,Qm*#3R%#@0[ER0
- XdB@jd,QJJBfpZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0E@&MD@mZBbj[#3N*a!P
- XMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbjS$@eKCfPM,Q-ZE`N
- X*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!eYDA0M-5j
- XM,Qm*#3R%#@0[ER0dB@jd,QJJBfpZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0E@P
- XcBc)ZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbj
- XS$@e[ER0dCA*c,Q-ZE`N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJ0E@p
- XbD@%a,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-
- XZD!eYEh*TB6)ZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAK
- XdCA*ZFbjS$A"XBAPPFLjM,Qm*#3R%#@0[ER0dB@jd,QJJBfpZCQPR,QJJG(P`CA-
- XZD!e`Eh4TEfjc,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9
- XiG'9bER-ZD!e`FQ&jCA)ZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9
- Xc,QJJCAKdCA*ZFbjS$A*PBf&XE#jM,Qm*#3R%#@0[ER0dB@jd,QJJBfpZCQPR,QJ
- XJG(P`CA-ZD#"PH(4PFQjc,QJ0FQjN,Q-ZE`N*#3R%#@0[ER0dB@jd,QJJ)#!J)#!
- XJ)#!JG(P`CA-ZD!ecBACP,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"
- XPFbjS)'9iG'9bER-ZD!ecBh*[E'ac,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@F
- XZD#"dHA"PFbjS)'9iG'9bER-ZD!ecCA4c,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfj
- XQD@FZD!ecD@GZB@ac,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbj
- XS)'9iG'9bER-ZD!ecF'9XE(-ZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4
- XjF'9c,QJJCAKdCA*ZFbjS$A0dB@CQFbjM,Qm*#3R%#@0[ER0dB@jd,QJJBfpZCQP
- XR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0Fh4[FQ8a,Q-ZE`N*#F3*BfpZFh4KER3ZD#"
- XMEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!ecG'pbC6)ZBbj[#3N*a!PMEfjcG'&
- XZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbjS$A4KBQaPFbjM,Qm*#3R%#@0
- X[ER0dB@jd,QJJBfpZCQPR,QJJG(P`CA-ZD!edFQ9KFh9bC5jM,Qm*#F3*BfpZFh4
- XKER3ZD#"MEfjQD@FZD#"dHA"PFbjS$A9ZC'9Q,Q-ZE`N*#F3*BfpZFh4KER3ZD#"
- XMEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!efBA*TB@*XC5jM,Qm*#F3*BfpZFh4
- XKER3ZD#"MEfjQD@FZD#"dHA"PFbjS$AGKEQ4c,Q-ZE`N*#F3*BfpZFh4KER3ZD#"
- XMEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!ehDATKFQ3ZBbj[#3N*a!PMEfjcG'&
- XZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbjS$3eYB@0NBA4K,R*cFQ-ZE`N
- X*a!NJ)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)'eKBh*cFQ-
- XZD!eYB@0bFh*M,R*cFQ-ZE`N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJ
- XJCAKdCA*ZFbjS)'eKBh*cFQ-ZD!eYEfjcG'9bFbjbFh*M,Qm*#F3*BfpZFh4KER3
- XZD#"MEfjQD@FZD#"dHA"PFbjS$A"XBAPPFLjbFh*M,Qm*#F3*BfpZFh4KER3ZD#"
- XMEfjQD@FZD#"dHA"PFbjS$A4KBQaPFbjbFh*M,Qm*#F3*BfpZFh4KER3ZD#"MEfj
- XQD@FZD#"dHA"PFbjS$A4bC@&cGA*P,R*cFQ-ZE`N*a!PMEfjcG'&ZG#jS)'0[EQC
- XTCbjS)(4jF'9c,QJ0GQ&bD@&LE'8ZFR0bBbj[#3R%#@0[ER0dB@jd,QJJBfpZCQP
- XR,QJJG(P`CA-ZD!fU&J!!!3!!!!&-!!!!6!!!!$)!!!!F!%!!3!#D!F3!!3%!!!!
- X!!!!!!))(3fpZCQPbE3K0B@YP4QPXC5d#!!!!9%9B9%e38b!"!!!!!%!!!!!!!!"
- X849K869"6)!%!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!++&Jjm!!"E0!!!"IJ#$!!!
- X!!*3!"`!!!!!!M!%!!*i"4J3$6Q9h!!!!!!!!TJ%!!,J"4J3'3f&ZBf9X!!!!!!#
- X0!!i!R3#kL!Y1CAFJ9fPZC'ph1J!!!!!!!"S!h`!Z!9Z!!!!!!!!!0!%!!%B"4J3
- X&4@TPBh3!!!!!!!"1!3!!B!&'"!9%FQPfC3!!!!!!!!")!!P0EfjKBfm!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!3!2J!2!G-#F`!q!!m"d`*cSS@5q3!!&Xd
- X!!"E0!!!6e`%!!!!"!!!!!8`!!!"-!!!!-J!Z#8!)&J!!!"`!-J!!69"68J!!!!S
- X$lIrr!!!!!!![$)42eJ:
- END_OF_FILE
- if test 8517 -ne `wc -c <'mac/MakeFile.hqx'`; then
- echo shar: \"'mac/MakeFile.hqx'\" unpacked with wrong size!
- fi
- # end of 'mac/MakeFile.hqx'
- if test -f 'mac/dumpres/MakeFile.hqx' -a "${1}" != "-c" ; then
- mv -f mac/dumpres/MakeFile.hqx mac/dumpres/MakeFile.hqx.old
- fi
- echo shar: Extracting \"'mac/dumpres/MakeFile.hqx'\" \(1515 characters\)
- sed "s/^X//" >'mac/dumpres/MakeFile.hqx' <<'END_OF_FILE'
- X(This file must be converted with BinHex 4.0)
- X:#%eKDf9'D@aP!&4&@&408&-J!3!!!!+E!!!"IV2*3dp`G'P[ER-J25!YE@*R)'p
- XZ$8a2F(4TEfjc)$d0$84eEA"5CA-ZEb$%)%4eEA"5CA-ZB`d*3b"l3dp`G'P[ER0
- Xp)#e[)%4eEA"5CA-ZEb"%G@e`8Q9c,Q-0$84eEA"5CA08CA0d,Q-ZEb$%)%4eEA"
- X5CA08CA0d,Q-0#8-JHd02F(4TEfjcI5"%G@e`8Q9c9'9cG#jM$3N06f*UC@0dFb!
- Xp)%4eEA"5CA08CA0d,Q-ZEb"%G@e`8Q9c,Qm0$5-J5PFk)%05G@jdD@eP,QmJB@j
- XN)%0*ER4PFQCKBf8ZEb"bC@e[GQ9N)(0TEQ0P)%NJGf&c)(4[E'3JG'KKG#"dD'9
- Xj)'&bC5"[BR0[E'9dC3e%G@e`8Q9c9'9cG#$%a#"l6f*UC@0dFhd0#8aTEQXJHda
- X2F(4TEfjcI5!YGb!YBb!R69"6)#FJ,A3J69"69##f$3N*HdpLDQ9MG(0p),B0#3N
- XLHdaTBR*KFQPPFhdLFh4eBR-ZEb#f$3N*)RY-D@*bBA*TCA0p)P*eER4TE@8ZEb#
- Xf$3N*)RY-D@*bBA*TCA0p)NPZG'9bCQ&MC5j[),B0#3NLHd0-D@*bBA*TCA0p)P0
- XdC%0-D@)ZEb#f$3N*)RY$6'PLFQ&bD@9cI5*$8d&148aTBLj[),B0#3NLHd0-D@*
- XbBA*TCA0p)NeKG'JZEb#f$3N*)RY-D@*bBA*TCA0p)P4[Efa-D@*c,QmJYJd*#5e
- X[)%4eEA"5CA08CA0d$3e*ER0dB@aX)-3J4(9YF&*PFbjS)%4eEA"5CA-ZE`d*4(9
- X`E'PMBA4P)#ej)%4eEA"5CA-ZD#!LHd0*EQ0XG@4PFhdL$3P%GA"XD@0KG'8J,AN
- XJ4(9YF&*PFbj[)#*l3daTBR*KFQPPFhdL$6Yi!!!"!!!!!8`!!!"-!!!!-N4eEA"
- X5CA08CA0d,QeKDf80)b!J)&4KFQGPG$SJ)#!J$8eKDf9'D@aP,Q4eEA!#!!!!9%9
- XB9%e38b!!!!!!!!!!!&4&@&408&-J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SS@
- X$J3!!!TX!!!&qBA*MD#!e,#!a16Jj)$%b1M)a1M3d$3e%G@e`8Q9c9'9cG#jM,Qm
- XJa#"%G@e`8Q9c9'9cG#jYB@YP)%4eEA"5CA08CA0d,Q-0#8-J4(9YF&*PFe4PFh3
- XZB`e%G@e`8Q9c,Q-ZEb$%)%4eEA"5CA08CA0d,QeKDf8J4(9YF&*PFbjM$3!!!%J
- X!#8e[EQ&ME`##!!-!#3!+Irm!$J!*!!Trr`#(!)%!JRrr!!B!"!!q!!m"d`*c!$i
- X!$`(6!R1LKBLX!!!#!J!!!J)!!!!!!3!!!!%!!!!"6!!!!%`!!!!b!#eT3!Kd!!!
- X!(!!b!!"08&05!!!!#J2Yrrm!!!!!!#jV*$e,:
- END_OF_FILE
- if test 1515 -ne `wc -c <'mac/dumpres/MakeFile.hqx'`; then
- echo shar: \"'mac/dumpres/MakeFile.hqx'\" unpacked with wrong size!
- fi
- # end of 'mac/dumpres/MakeFile.hqx'
- if test -f 'mac/scrnmgr/ScrnMgr.doc' -a "${1}" != "-c" ; then
- mv -f mac/scrnmgr/ScrnMgr.doc mac/scrnmgr/ScrnMgr.doc.old
- fi
- echo shar: Extracting \"'mac/scrnmgr/ScrnMgr.doc'\" \(20464 characters\)
- sed "s/^X//" >'mac/scrnmgr/ScrnMgr.doc' <<'END_OF_FILE'
- XCopyright (C) Curtis McCauley, 1989. All rights reserved.
- X
- XYou may copy this subroutine package freely, modify it as you desire,
- Xand distribute it at will, as long as the copyright notice in the
- Xsource material is not disturbed, excepting that no one may use this
- Xpackage or any part of it for commercial purposes of any kind without
- Xthe express written consent of its author.
- X
- XThis document describes a package of subroutines I have decided to
- Xcall the Screen Manager.
- X
- XEnclosed files:
- X
- XScrnMgr.doc What you are reading
- X
- XScrnMgr.c The source for the subroutine package
- XScrnMgr.r Resources used by the subroutines
- XScrnMgr.h Include file for applications
- X
- XScrnMgr.rsrc The Rez output from ScrnMgr.r (if you do not have Rez)
- X
- XScrnTest.c A test application
- XScrnTest.r Resources used by the test application
- X
- XMakeFile What the name implies
- X
- XThe package is pretty heavily built around MPW. It is specifically
- Xtailored for version 3.0, but should work with 2.0.2. The only thing
- XI think you would have to modify for the older version is the SIZE
- Xresource. Porting the package to other environments is not something
- XI would recommend.
- X
- XThe make file recognizes two primary targets: ScrnTest - which will
- Xbuild the test application along with the subroutine package object
- Xfile, and Install - which will copy the object files to appropriate
- Xdirectories. If you have a non-standard MPW directory structure, you
- Xwill want to modify the rules for Install.
- X
- XI initially built the subroutine package around a model of the IBM PC
- Xscreen BIOS calls. The idea was to take a public domain curses
- Xpackage for the PC and replace all the BIOS calls with calls to my
- Xpackage. Since my ultimate goal was to port the UNIX moria program
- Xwhich relied on curses, and the only copy of curses I had was the PC
- Xversion, this strategy initially seemed to make sense. Moria, as it
- Xturns out, only calls a few of the curses routines, so I never had to
- Xactually port the whole PC curses package. It was a lot easier to
- Xjust replace the curses calls in moria with direct calls to my
- Xsubroutine package. By reducing the number of software layers I
- Xachieved better performance, anyway.
- X
- XStill, the internal structure of the package resembles the PC BIOS. I
- Xkeep two large byte arrays to hold the entire screen, one with the
- Xcharacters, the other with the attributes. The attributes are
- Xforeground and background color (the eight original quickdraw colors),
- Xunderlined, and italicized. The bulk of the package, at least in
- Xnumber of functions, is taken up with routines to manipulate these
- Xbuffers, either to put data in or take data out. Whenever the
- Xcontents of the buffers are changed, the window is not immediately
- Xupdated to reflect the change. Instead, I "invalidate" the portion of
- Xthe window changed. This is done by using InvalRect(), which causes
- Xthe area to be accumulated in the update region of the window, or by
- Xadding the area to an internal representation of the dirty area of the
- Xscreen. This internal representation is less precise than the region
- Xwhich is kept by quickdraw calls to InvalRect(). It consists of the
- Xbeginning and ending dirty area on each screen line. The latter
- Xmethod is faster, but the screen changes will only be noticed when a
- Xcall to update the screen is explicitly made, as opposed to the idle
- Xroutine (see below) catching an update event. There are two sets of
- Xroutines, then, to change the screen buffers. The ones prefixed with
- Xa 'D' (for delayed update) use the later method.
- X
- XA program which uses this package, at a minimum, has to call
- XInitScreenMgr() at the beginning to open the window, call
- XIdleScreenMgr() frequently in the middle to handle all the standard
- Xmac events (mouse and keyboard events, especially, but also the
- XMultiFinder stuff as well), and call CloseScreenMgr() at the end. The
- Xbest time to call the idle routine is whenever your program is waiting
- Xfor a keystroke. Another good time is at regular intervals in a heavy
- Xcompute loop. If you do this, you can actually get your program to
- Xrun in the background, but all the idle calls will, of course, slow
- Xthings down some. In heavy compute passages, then, you might instead
- Xwant to bracket the code with calls to BeginScreenWait() and
- XEndScreenWait() to change the mouse cursor to a spinning watch.
- X
- XA description of each routine in the package follows --
- X
- Xint InitScreenMgr(int h, int v, char *title,
- X char *resFile, OSType rfCreator, OSType rfType,
- X void (*fileMenuProc)(int item),
- X void (*appMenuProc)(int item),
- X int multiColorFlag);
- X
- XThis routine initializes the package, allocates buffers, and puts the
- Xwindow on the monitor. H and v are the dimensions of the screen in
- Xcharacters. Title is the window title. ResFile, rfCreator, and
- XrfType describe the file to contain the configuration information.
- XThis file will be maintained in the system folder. It remembers the
- Xposition and size of the window, the font size selected, and, if the
- Xscreen is only two colors, the user's choices for foreground and
- Xbackground color. FileMenuProc points to a routine to be called when
- Xa selection from the file menu is made. A click in the window's close
- Xbox is considered like a selection from the menu, resulting in a call
- Xto fileMenuProc with the item number equal to the constant
- XcloseBoxItem. AppMenuProc points to a routine to be called when a
- Xselection from the application menu is made. Both can be NULL, in
- Xwhich case the subroutine package will handle them as best it can.
- XMultiColorFlag is non-zero when more than two colors will be displayed
- Xon the screen.
- X
- Xvoid IdleScreenMgr(void);
- X
- XThis routine handles the macintosh event queue. It must be called
- Xfrequently, or the user will not be able to select from menus, switch
- Xto another program or desk accessory, etc. It also blinks the screen
- Xcursor.
- X
- Xvoid ShowScreen(int visible);
- X
- XShows or hides the screen window, depending upon the visible flag.
- X
- Xvoid CloseScreenMgr(void);
- X
- XCloses the window, deallocates buffers.
- X
- Xvoid SetScreenQuitProc(void (*quitProc)(void), int willReturnFlag);
- X
- XTells the package what routine to call when quit is chosen. If the
- Xroutine pointed to by quitProc will always return (as opposed to doing
- Xsomething like ExitToShell()), willReturnFlag should be non-zero.
- X
- Xvoid SetScreenAboutProc(void (*aboutProc)(void));
- X
- XAllows the standard about box to be overridden. AboutProc points to a
- Xroutine which should be called when the about item is chosen from the
- Xapple menu.
- X
- XThe following routines all manipulate the screen buffers. Calls
- Xbeginning with 'Set' do not move the screen cursor and need to be told
- Xwhere to begin the operation. Calls beginning with 'Write' move the
- Xcursor and begin the operation at the current cursor location. All of
- Xthese routines can be prefixed with a 'D' to make changes to the
- Xinternal dirty area instead of calling InvalRect(). The internal
- Xdirty area is updated only when a call to UpdateScreen() is made or
- Xsome external update event is generated and caught by the idle
- Xroutine.
- X
- XThe screen cells are indicated by column (h) and row (v) numbers which
- Xincrease from left to right and top to bottom. Hence the upper left
- Xof the screen is (0, 0) and the bottom right is (h, v) as set by the
- Xcall to InitScreenMgr().
- X
- Xvoid SetScreenChar(char c, int h, int v);
- X
- Xvoid SetScreenCharAttr(char c, char a, int h, int v);
- X
- Xvoid WriteScreenChar(char c);
- X
- Xvoid WriteScreenCharAttr(char c, char a);
- X
- XSets the character at (h, v) to c and the attribute to a.
- X
- Xvoid SetScreenBuffer(char *buffer, int rowBytes,
- X Rect *area, int h, int v);
- X
- Xvoid SetScreenBufferAttr(char *buffer, char a,
- X int rowBytes, Rect *area, int h, int v);
- X
- Xvoid WriteScreenBuffer(char *buffer, int rowBytes, Rect *area);
- X
- Xvoid WriteScreenBufferAttr(char *buffer, char a,
- X int rowBytes, Rect *area);
- X
- XSets the block of characters at (h, v) to the contents of buffer and
- Xall the attributes to a. RowBytes indicates the number of bytes in a
- Xrow in buffer. Area indicates the block of characters to copy,
- Xassuming that the first byte in buffer is at (0, 0). Note: This means
- Xthat the area rectangle is in buffer coordinates, not screen
- Xcoordinates.
- X
- Xvoid SetScreenString(char *str, int h, int v);
- X
- Xvoid SetScreenStringAttr(char *str, char a, int h, int v);
- X
- Xvoid WriteScreenString(char *str);
- X
- Xvoid WriteScreenStringAttr(char *str, char a);
- X
- XSets the characters at (h, v) and following to the contents of string
- Xand all the attributes to a.
- X
- Xvoid SetScreenImage(char *c, char *a, int rowBytes,
- X Rect *area, int h, int v);
- X
- Xvoid WriteScreenImage(char *c, char *a,
- X int rowBytes, Rect *area);
- X
- XSets the block of characters at (h, v) to the contents of c and the
- Xattributes to the contents of a. RowBytes indicates the number of
- Xbytes in a row in the c and a buffers. Area indicates the block of
- Xbytes to copy, assuming that the first byte in the buffers is at (0,
- X0). Note: This means that the area rectangle is in buffer
- Xcoordinates, not screen coordinates.
- X
- Xvoid FillScreen(char c, char a, Rect *area);
- X
- XFills the part of the screen indicated by area with the character c
- Xand the attribute a. Area is in screen coordinates.
- X
- Xvoid EraseScreen(Rect *area);
- X
- XFills the part of the screen indicated by area with the blank
- Xcharacter (0x20) and the normal attribute (attrNormal). Area is in
- Xscreen coordinates.
- X
- Xvoid ScrollScreen(int dh, int dv, Rect *area, char a);
- X
- XScrolls the part of the screen indicated by area the distance
- Xindicated by dh and dv (which may be negative). The leftover space is
- Xfilled with the blank character (0x20) and the normal attribute
- X(attrNormal). Area is in screen coordinates.
- X
- Xvoid MoveScreenCursor(int dh, int dv);
- X
- XMoves the screen cursor by the number of character cells indicated by
- Xdh and dv (which may be negative).
- X
- Xvoid SetScreenCursor(int h, int v);
- X
- XPositions the screen cursor at the character cell indicated by h and v.
- X
- Xvoid DefineScreenCursor(int color, int lines, int blinkRate);
- X
- XDefines the screen cursor. Color indicates what you would expect,
- Xlines indicates the height of the cursor in pixels (up to the height
- Xof the character cell, so lines = 32767 will probably give you a block
- Xcursor), and blinkRate indicates the number of clock ticks between
- Xcursor blinks or zero for a non-blinking cursor (a really friendly
- Xprogram will use GetCaretTime() to set this). The default cursor uses
- Xblack, 2 lines, and no blinks. It is initially hidden.
- X
- Xvoid HideScreenCursor(void);
- X
- Xvoid ShowScreenCursor(void);
- X
- XAn internal counter is used to keep track of whether the cursor is to
- Xbe shown on the screen. When it is less than or equal to zero, the
- Xcursor is hidden. Otherwise it is shown. The hide routine decrements
- Xthis counter. Show increments it.
- X
- Xvoid UpdateScreen(void);
- X
- XImmediately draws the dirty portion of the screen. The dirty portion
- Xincludes the update region of the window and the internal dirty area
- Xmaintained by the 'D' buffer manipulation routines.
- X
- XIn addition to the macintosh event queue, this package maintains a
- Xbuffer of keystrokes and mouse clicks. Whenever the idle routine is
- Xcalled, the events are pulled out of the macintosh queue and put into
- Xthe internal buffer.
- X
- Xvoid FlushScreenKeys(void);
- X
- XFlushes the internal buffer of keystrokes and the macintosh event queue.
- X
- Xint CountScreenKeys(void);
- X
- XCounts the number of entries in the internal keystroke buffer.
- X
- Xint GetScreenKeys(char *keyCode, char *modifiers, char *ascii,
- X int *h, int *v);
- X
- XPulls the top element off the internal buffer. KeyCode contains the
- Xkeycode as described in the IM Event Manager documentation. Modifiers
- Xcontains bits which indicate the state of the control keys (command,
- Xshift, caps lock, option, and control) and whether the event is a
- Xmouse click. There are masks defined in ScrnMgr.h that indicate the
- Xexact bit for each. In the case of a mouse click, h and v will be
- Xset. If you are not interested in mouse clicks, you can pass NULLs
- Xfor both. Ascii will get the ascii code of the key hit. If the
- Xkeyboard in use has a control key, the ascii value is taken right from
- Xthe event which will contain the appropriate control code. If the
- Xkeyboard does not have a control key, a test is made to see if the
- Xcommand modifier key is down. If so, the ascii value is converted to
- Xthe appropriate control code. See the discussion on MENU resources
- Xbelow to see how command key equivalents work on machines without a
- Xcontrol key.
- X
- Xvoid EnableScreenMouse(int flag);
- X
- XEnables or disables the queuing of mouse clicks in the internal
- Xbuffer, according to flag. Initially, mouse clicks are disabled.
- X
- Xvoid ClipScreenMouse(Rect *clip);
- X
- XLimits the detection of mouse clicks to the area indicated by clip,
- Xmeasured in character cells on the screen.
- X
- Xvoid GetScreenCharAttr(char *c, char *a, int h, int v);
- X
- XReturns in c and a the character and attribute at (h, v).
- X
- Xvoid GetScreenImage(char *c, char *a, int rowBytes,
- X Rect *area, int h, int v);
- X
- XReturns in c and a the block of characters and attributes beginning at
- X(h, v). RowBytes indicates the number of bytes in a row in the c and
- Xa buffers. Area indicates the block of bytes to copy, assuming that
- Xthe first byte in the buffers is at (0, 0). Note: This means that the
- Xarea rectangle is in buffer coordinates, not screen coordinates.
- X
- Xvoid GetScreenCursor(int *h, int *v);
- X
- XReturns the screen coordinates of the cursor.
- X
- XThe next few routines help with dialogs. They are designed to work
- Xwith multi-monitor systems. On such systems, the active monitor is
- Xchosen by the current mouse location, arguably not a good choice, but
- Xprobably a choice as good as any other.
- X
- Xint YesOrNo(char *question);
- X
- XPuts up a dialog box with the string pointed to by question, a button
- Xfor yes (the default), and a button for no. Returns true if yes is
- Xselected. The box will be centered horizontally on the active
- Xmonitor, one-third of the way from the top.
- X
- Xint DoScreenALRT(int id, int kind, Fixed hRatio, Fixed vRatio);
- X
- XPuts up the alert indicated by id. Kind specifies the type of alert
- X(normal, stop, note, or caution). There are constants defined in
- XScrnMgr.h for each of these kinds. The alert will be centered hRatio
- Xof the way from the left and vRatio of the way from the top of the
- Xactive monitor. (I.e., if hRatio = vRatio = .5, the alert will be
- Xexactly in the middle of the screen.) ScrnMgr.h contains fixed
- Xconstants for common ratios. See IM for a general discussion of fixed
- Xnumbers. Returns the item number of the button pressed.
- X
- Xvoid CenterScreenDLOG(int id, Fixed hRatio, Fixed vRatio,
- X int *h, int *v);
- X
- XGiven a DLOG, which does not have to be currently shown on the screen,
- Xindicated by id, and hRatio and vRatio, returns where to position its
- Xtop left corner in h and v. See DoScreenALRT for an explanation of
- XhRatio and vRatio. This routine is generally used prior to calling
- XGetNewDialog(). You should declare your DLOG to be invisible, call
- XMoveWindow() using h and v to center it, and then call ShowWindow().
- X
- Xvoid GetScreenBounds(Rect *bounds);
- X
- XReturns the bounds in global coordinates of the active monitor, less
- Xthe menu bar if it is on this monitor.
- X
- Xpascal void DrawDefaultBorder();
- X
- Xpascal void DrawGroupRect();
- X
- XTwo handy routines for installing in dialog userItems.
- X
- Xvoid ConfigScreenMgr(int force, ResType theType, int theID,
- X int (*configProc)(Handle theData));
- X
- XA routine to manipulate resources in the configuration file. Checks
- Xfor the presence of the resource indicated by theType and theID. If
- Xthis resource is not found, it does nothing. If the resource is found
- Xsomewhere other than in the configuration file (see InitScreenMgr()),
- Xthis routine assumes that some action needs to be taken. The usual
- Xplace other the the configuration file to find this kind of resource
- Xis in the program file itself and logically represents default values.
- XIf some action needs to be taken or force is non-zero, the routine
- Xpointed to by configProc is called. TheData contains a handle to the
- Xresource found as described above. ConfigProc should generally put up
- Xa dialog box to change the data in theHandle. If it does change the
- Xdata, configProc should return true. Otherwise, false. If configProc
- Xreturns true, the handle is marked changed so that it is added to the
- Xconfiguration file. A nice time to call this routine is at the start
- Xof your program with force false, so that initial configuration
- Xinformation can be obtained from the user. Then provide a menu item
- Xin the application menu to allow the user to change it later, calling
- Xthis routine with force true.
- X
- Xvoid BeginScreenWait(int rate);
- X
- XChanges the cursor to a spinning wristwatch. Rate indicates the
- Xnumber of ticks between each spin.
- X
- Xvoid EndScreenWait(void);
- X
- XReturns the cursor to the standard arrow.
- X
- XHandle GetFileMHandle(void);
- X
- XHandle GetAppMHandle(void);
- X
- XReturns a handle to the file or application menu.
- X
- Xint PushScreen();
- X
- XSaves the current screen buffer (characters, attributes, and cursor
- Xlocation) on a stack. Allocates a significant amount of memory.
- XReturns 0 if successful.
- X
- Xvoid PopScreen()
- X
- XSets the screen contents to the last screen saved by PushScreen(). If
- Xthere are no saved screens on the stack, does nothing.
- X
- XYou should include in your application all the resources found in the
- Xfile ScrnMgr.rsrc. This file is produced from ScrnMgr.r by the MPW
- Xtool Rez. The best way to do this, assuming you have Rez, is to
- Xinclude at the beginning of your program's .r file, the line 'include
- X"ScrnMgr.rsrc";'
- X
- XThis package assumes that your program will have 4 or 5 menus: the
- XApple, File, Edit, Screen (FontSize), and optionally an "application"
- Xmenu. You can override the standard file menu, if you provide a
- XfileMenuProc in the InitScreenMgr() call. If you do override, you
- Xshould provide two menu resources to replace the default ones in
- XScrnMgr.rsrc. The first must be MENU(129). The second, MENU(229),
- Xmust be a copy of the first, except for not having any command key
- Xequivalents. It will be used on machines without a control key. In
- Xother words, machines without a control key on the keyboard cannot use
- Xcommand key equivalents. If you want to implement an application
- Xmenu, you must provide an appMenuProc to the initialization routine,
- Xalong with MENU(133) and MENU(233). The first menu is the application
- Xmenu with command key equivalents, the second without.
- X
- XYou will probably want to override the STR(128) resource which
- Xcontains the title of the first item in the apple menu (i.e, the about
- Xitem). If you override the DLOG(128) and DITL(128) resources, you can
- Xrely on the package to put up your customized about box. Otherwise,
- Xyou can call SetScreenAboutProc() to really customize things. The
- Xdefault about box mentions the version of this package and its
- Xprogrammer.
- X
- XThe STR(129) resource contains the name of the font the package should
- Xuse. Any true monospaced font should work. Be forewarned that very
- Xfew fonts are completely monospaced. Many have a few odd characters
- Xwhose width is not the same as most others. Since this package relies
- Xon GetFontInfo() and the returned widMax to setup the screen, even the
- Xpresence of one extra wide character in the font will cause funny
- Xthings to happen.
- X
- XYou will probably want to override the INFO(1) resource. This
- Xresource contains the window size, position, font size, and colors. A
- Xcopy of it is made the first time your program is run in the
- Xconfiguration file and is thereafter kept up to date. Hence, the copy
- Xyou keep in you application file should contain the default initial
- Xvalues. The window size and position are indicated by a rectangle in
- Xglobal coordinates. Since ResEdit does not provide a template for
- Xthis kind of resource, you will have to at least look at the ScrnMgr.r
- Xfile to see the format of the resource if you want to use ResEdit to
- Xmodify it.
- X
- XFinally, you will want to supply a SIZE resource to make your program
- XMultiFinder friendly.
- X
- XI am somewhat ambivalent about releasing this package to the public.
- XI do not think that it is particularly well-written. And I certainly
- Xdo not think that it does justice to what the mac is all about. It is
- Xprobably full of bugs. The only real testing that it has had is in
- Xthe moria port, which doesn't call all of the routines available.
- XHence, I do not provide an express or implied warranty of any kind.
- XYou use the package at your own risk. If you have any questions, I
- Xcan be reached at 73230.224@compuserve.com or at 73230,224 on CIS.
- X
- XCurtis McCauley
- X22 July 1989
- END_OF_FILE
- if test 20464 -ne `wc -c <'mac/scrnmgr/ScrnMgr.doc'`; then
- echo shar: \"'mac/scrnmgr/ScrnMgr.doc'\" unpacked with wrong size!
- fi
- # end of 'mac/scrnmgr/ScrnMgr.doc'
- if test -f 'source/player.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'source/player.c'\"
- else
- echo shar: Extracting \"'source/player.c'\" \(19680 characters\)
- sed "s/^X//" >'source/player.c' <<'END_OF_FILE'
- X/* player.c: player specific variable definitions
- X
- X Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
- X
- X This software may be copied and distributed for educational, research, and
- X not for profit purposes provided that this copyright and statement are
- X included in all such copies. */
- X
- X#include "constant.h"
- X#include "config.h"
- X#include "types.h"
- X
- X/* Player record for most player related info */
- Xplayer_type py;
- X/* player location in dungeon */
- Xint16 char_row;
- Xint16 char_col;
- X/* calculated base hp values for player at each level, store them so that
- X drain life + restore life does not affect hit points */
- Xint16u player_hp[MAX_PLAYER_LEVEL];
- X
- X/* Class titles for different levels */
- X#ifdef MACGAME
- Xchar *(*player_title)[MAX_PLAYER_LEVEL];
- X#else
- Xchar *player_title[MAX_CLASS][MAX_PLAYER_LEVEL] = {
- X /* Warrior */
- X{"Rookie","Private","Soldier","Mercenary","Veteran(1st)","Veteran(2nd)",
- X"Veteran(3rd)","Warrior(1st)","Warrior(2nd)","Warrior(3rd)","Warrior(4th)",
- X"Swordsman-1","Swordsman-2","Swordsman-3","Hero","Swashbuckler","Myrmidon",
- X"Champion-1","Champion-2","Champion-3","Superhero","Knight","Superior Knt",
- X"Gallant Knt","Knt Errant","Guardian Knt","Baron","Duke","Lord (1st)",
- X"Lord (2nd)","Lord (3rd)","Lord (4th)","Lord (5th)","Lord (6th)","Lord (7th)",
- X"Lord (8th)","Lord (9th)","Lord Gallant","Lord Keeper","Lord Noble"},
- X /* Mage */
- X{"Novice","Apprentice","Trickster-1","Trickster-2","Trickster-3","Cabalist-1",
- X"Cabalist-2","Cabalist-3","Visionist","Phantasmist","Shadowist","Spellbinder",
- X"Illusionist","Evoker (1st)","Evoker (2nd)","Evoker (3rd)","Evoker (4th)",
- X"Conjurer","Theurgist","Thaumaturge","Magician","Enchanter","Warlock",
- X"Sorcerer","Necromancer","Mage (1st)","Mage (2nd)","Mage (3rd)","Mage (4th)",
- X"Mage (5th)","Wizard (1st)","Wizard (2nd)","Wizard (3rd)","Wizard (4th)",
- X"Wizard (5th)","Wizard (6th)","Wizard (7th)","Wizard (8th)","Wizard (9th)",
- X"Wizard Lord"},
- X /* Priests */
- X{"Believer","Acolyte(1st)","Acolyte(2nd)","Acolyte(3rd)","Adept (1st)",
- X"Adept (2nd)","Adept (3rd)","Priest (1st)","Priest (2nd)","Priest (3rd)",
- X"Priest (4th)","Priest (5th)","Priest (6th)","Priest (7th)","Priest (8th)",
- X"Priest (9th)","Curate (1st)","Curate (2nd)","Curate (3rd)","Curate (4th)",
- X"Curate (5th)","Curate (6th)","Curate (7th)","Curate (8th)","Curate (9th)",
- X"Canon (1st)","Canon (2nd)","Canon (3rd)","Canon (4th)","Canon (5th)",
- X"Low Lama","Lama-1","Lama-2","Lama-3","High Lama","Great Lama","Patriarch",
- X"High Priest","Great Priest","Noble Priest"},
- X /* Rogues */
- X{"Vagabond","Footpad","Cutpurse","Robber","Burglar","Filcher","Sharper",
- X"Magsman","Common Rogue","Rogue (1st)","Rogue (2nd)","Rogue (3rd)",
- X"Rogue (4th)","Rogue (5th)","Rogue (6th)","Rogue (7th)","Rogue (8th)",
- X"Rogue (9th)","Master Rogue","Expert Rogue","Senior Rogue","Chief Rogue",
- X"Prime Rogue","Low Thief","Thief (1st)","Thief (2nd)","Thief (3rd)",
- X"Thief (4th)","Thief (5th)","Thief (6th)","Thief (7th)","Thief (8th)",
- X"Thief (9th)","High Thief","Master Thief","Executioner","Low Assassin",
- X"Assassin","High Assassin","Guildsmaster"},
- X /* Rangers */
- X{"Runner (1st)","Runner (2nd)","Runner (3rd)","Strider (1st)","Strider (2nd)",
- X"Strider (3rd)","Scout (1st)","Scout (2nd)","Scout (3rd)","Scout (4th)",
- X"Scout (5th)","Courser (1st)","Courser (2nd)","Courser (3rd)","Courser (4th)",
- X"Courser (5th)","Tracker (1st)","Tracker (2nd)","Tracker (3rd)",
- X"Tracker (4th)","Tracker (5th)","Tracker (6th)","Tracker (7th)",
- X"Tracker (8th)","Tracker (9th)","Guide (1st)","Guide (2nd)","Guide (3rd)",
- X"Guide (4th)","Guide (5th)","Guide (6th)","Guide (7th)","Guide (8th)",
- X"Guide (9th)","Pathfinder-1","Pathfinder-2","Pathfinder-3","Ranger",
- X"High Ranger","Ranger Lord"},
- X /* Paladins */
- X{"Gallant","Keeper (1st)","Keeper (2nd)","Keeper (3rd)","Keeper (4th)",
- X"Keeper (5th)","Keeper (6th)","Keeper (7th)","Keeper (8th)","Keeper (9th)",
- X"Protector-1","Protector-2","Protector-3","Protector-4","Protector-5",
- X"Protector-6","Protector-7","Protector-8","Defender-1","Defender-2",
- X"Defender-3","Defender-4","Defender-5","Defender-6","Defender-7","Defender-8",
- X"Warder (1st)","Warder (2nd)","Warder (3rd)","Warder (4th)","Warder (5th)",
- X"Warder (6th)","Warder (7th)","Warder (8th)","Warder (9th)","Guardian",
- X"Chevalier","Justiciar","Paladin","High Lord"}
- X};
- X#endif
- X
- X/* Base experience levels, may be adjusted up for race and/or class*/
- Xint32u player_exp[MAX_PLAYER_LEVEL] = {
- X 10, 25, 45, 70, 100, 140, 200, 280,
- X 380, 500, 650, 850, 1100, 1400, 1800, 2300,
- X 2900, 3600, 4400, 5400, 6800, 8400, 10200, 12500,
- X 17500, 25000, 35000L, 50000L, 75000L, 100000L, 150000L, 200000L,
- X 300000L, 400000L, 500000L, 750000L, 1500000L, 2500000L, 5000000L, 10000000L
- X};
- X
- X/*Race STR,INT,WIS,DEX,CON,CHR,
- X Ages, heights, and weights (male then female)
- X Racial Bases for: dis,srh,stl,fos,bth,bthb,bsav,hitdie,
- X infra, exp base, choice-classes */
- X#ifdef MACGAME
- Xrace_type *race;
- X#else
- Xrace_type race[MAX_RACES] = {
- X {"Human", 0, 0, 0, 0, 0, 0,
- X 14, 6, 72, 6,180, 25, 66, 4,150, 20,
- X 0, 0, 0, 0, 0, 0, 0, 10, 0, 100, 0x3F,
- X },
- X {"Half-Elf", -1, 1, 0, 1, -1, 1,
- X 24, 16, 66, 6,130, 15, 62, 6,100, 10,
- X 2, 6, 1, -1, -1, 5, 3, 9, 2, 110, 0x3F,
- X },
- X {"Elf", -1, 2, 1, 1, -2, 1,
- X 75, 75, 60, 4,100, 6, 54, 4, 80, 6,
- X 5, 8, 1, -2, -5, 15, 6, 8, 3, 120, 0x1F,
- X },
- X {"Halfling", -2, 2, 1, 3, 1, 1,
- X 21, 12, 36, 3, 60, 3, 33, 3, 50, 3,
- X 15, 12, 4, -5,-10, 20, 18, 6, 4, 110, 0x0B,
- X },
- X {"Gnome", -1, 2, 0, 2, 1, -2,
- X 50, 40, 42, 3, 90, 6, 39, 3, 75, 3,
- X 10, 6, 3, -3, -8, 12, 12, 7, 4, 125, 0x0F,
- X },
- X {"Dwarf", 2, -3, 1, -2, 2, -3,
- X 35, 15, 48, 3,150, 10, 46, 3,120, 10,
- X 2, 7, -1, 0, 15, 0, 9, 9, 5, 120, 0x05,
- X },
- X {"Half-Orc", 2, -1, 0, 0, 1, -4,
- X 11, 4, 66, 1,150, 5, 62, 1,120, 5,
- X -3, 0, -1, 3, 12, -5, -3, 10, 3, 110, 0x0D,
- X },
- X {"Half-Troll",4, -4, -2, -4, 3, -6,
- X 20, 10, 96, 10,255, 50, 84, 8,225, 40,
- X -5, -1, -2, 5, 20,-10, -8, 12, 3, 120, 0x05,
- X }
- X };
- X#endif
- X
- X/* 5 char race for printing scores. */
- Xchar *dsp_race[MAX_RACES] = {
- X "Human",
- X "H-Elf",
- X "Elf ",
- X "Hobbt",
- X "Gnome",
- X "Dwarf",
- X "H-Orc",
- X "H-Tro"
- X};
- X
- X/* Background information */
- X#ifdef MACGAME
- Xbackground_type *background;
- X#else
- Xbackground_type background[MAX_BACKGROUND] = {
- X{"You are the illegitimate and unacknowledged child ", 10, 1, 2, 25},
- X{"You are the illegitimate but acknowledged child ", 20, 1, 2, 35},
- X{"You are one of several children ", 95, 1, 2, 45},
- X{"You are the first child ", 100, 1, 2, 50},
- X{"of a Serf. ", 40, 2, 3, 65},
- X{"of a Yeoman. ", 65, 2, 3, 80},
- X{"of a Townsman. ", 80, 2, 3, 90},
- X{"of a Guildsman. ", 90, 2, 3,105},
- X{"of a Landed Knight. ", 96, 2, 3,120},
- X{"of a Titled Noble. ", 99, 2, 3,130},
- X{"of a Royal Blood Line. ", 100, 2, 3,140},
- X{"You are the black sheep of the family. ", 20, 3,50, 20},
- X{"You are a credit to the family. ", 80, 3,50, 55},
- X{"You are a well liked child. ", 100, 3,50, 60},
- X{"Your mother was a Green-Elf. ", 40, 4, 1, 50},
- X{"Your father was a Green-Elf. ", 75, 4, 1, 55},
- X{"Your mother was a Grey-Elf. ", 90, 4, 1, 55},
- X{"Your father was a Grey-Elf. ", 95, 4, 1, 60},
- X{"Your mother was a High-Elf. ", 98, 4, 1, 65},
- X{"Your father was a High-Elf. ", 100, 4, 1, 70},
- X{"You are one of several children ", 60, 7, 8, 50},
- X{"You are the only child ", 100, 7, 8, 55},
- X{"of a Green-Elf ", 75, 8, 9, 50},
- X{"of a Grey-Elf ", 95, 8, 9, 55},
- X{"of a High-Elf ", 100, 8, 9, 60},
- X{"Ranger. ", 40, 9,54, 80},
- X{"Archer. ", 70, 9,54, 90},
- X{"Warrior. ", 87, 9,54,110},
- X{"Mage. ", 95, 9,54,125},
- X{"Prince. ", 99, 9,54,140},
- X{"King. ", 100, 9,54,145},
- X{"You are one of several children of a Halfling ", 85,10,11, 45},
- X{"You are the only child of a Halfling ", 100,10,11, 55},
- X{"Bum. ", 20,11, 3, 55},
- X{"Tavern Owner. ", 30,11, 3, 80},
- X{"Miller. ", 40,11, 3, 90},
- X{"Home Owner. ", 50,11, 3,100},
- X{"Burglar. ", 80,11, 3,110},
- X{"Warrior. ", 95,11, 3,115},
- X{"Mage. ", 99,11, 3,125},
- X{"Clan Elder. ", 100,11, 3,140},
- X{"You are one of several children of a Gnome ", 85,13,14, 45},
- X{"You are the only child of a Gnome ", 100,13,14, 55},
- X{"Beggar. ", 20,14, 3, 55},
- X{"Braggart. ", 50,14, 3, 70},
- X{"Prankster. ", 75,14, 3, 85},
- X{"Warrior. ", 95,14, 3,100},
- X{"Mage. ", 100,14, 3,125},
- X{"You are one of two children of a Dwarven ", 25,16,17, 40},
- X{"You are the only child of a Dwarven ", 100,16,17, 50},
- X{"Thief. ", 10,17,18, 60},
- X{"Prison Guard. ", 25,17,18, 75},
- X{"Miner. ", 75,17,18, 90},
- X{"Warrior. ", 90,17,18,110},
- X{"Priest. ", 99,17,18,130},
- X{"King. ", 100,17,18,150},
- X{"You are the black sheep of the family. ", 15,18,57, 10},
- X{"You are a credit to the family. ", 85,18,57, 50},
- X{"You are a well liked child. ", 100,18,57, 55},
- X{"Your mother was an Orc, but it is unacknowledged. ", 25,19,20, 25},
- X{"Your father was an Orc, but it is unacknowledged. ", 100,19,20, 25},
- X{"You are the adopted child ", 100,20, 2, 50},
- X{"Your mother was a Cave-Troll ", 30,22,23, 20},
- X{"Your father was a Cave-Troll ", 60,22,23, 25},
- X{"Your mother was a Hill-Troll ", 75,22,23, 30},
- X{"Your father was a Hill-Troll ", 90,22,23, 35},
- X{"Your mother was a Water-Troll ", 95,22,23, 40},
- X{"Your father was a Water-Troll ", 100,22,23, 45},
- X{"Cook. ", 5,23,62, 60},
- X{"Warrior. ", 95,23,62, 55},
- X{"Shaman. ", 99,23,62, 65},
- X{"Clan Chief. ", 100,23,62, 80},
- X{"You have dark brown eyes, ", 20,50,51, 50},
- X{"You have brown eyes, ", 60,50,51, 50},
- X{"You have hazel eyes, ", 70,50,51, 50},
- X{"You have green eyes, ", 80,50,51, 50},
- X{"You have blue eyes, ", 90,50,51, 50},
- X{"You have blue-gray eyes, ", 100,50,51, 50},
- X{"straight ", 70,51,52, 50},
- X{"wavy ", 90,51,52, 50},
- X{"curly ", 100,51,52, 50},
- X{"black hair, ", 30,52,53, 50},
- X{"brown hair, ", 70,52,53, 50},
- X{"auburn hair, ", 80,52,53, 50},
- X{"red hair, ", 90,52,53, 50},
- X{"blond hair, ", 100,52,53, 50},
- X{"and a very dark complexion.", 10,53, 0, 50},
- X{"and a dark complexion.", 30,53, 0, 50},
- X{"and an average complexion.", 80,53, 0, 50},
- X{"and a fair complexion.", 90,53, 0, 50},
- X{"and a very fair complexion.", 100,53, 0, 50},
- X{"You have light grey eyes, ", 85,54,55, 50},
- X{"You have light blue eyes, ", 95,54,55, 50},
- X{"You have light green eyes, ", 100,54,55, 50},
- X{"straight ", 75,55,56, 50},
- X{"wavy ", 100,55,56, 50},
- X{"black hair, and a fair complexion.", 75,56, 0, 50},
- X{"brown hair, and a fair complexion.", 85,56, 0, 50},
- X{"blond hair, and a fair complexion.", 95,56, 0, 50},
- X{"silver hair, and a fair complexion.", 100,56, 0, 50},
- X{"You have dark brown eyes, ", 99,57,58, 50},
- X{"You have glowing red eyes, ", 100,57,58, 60},
- X{"straight ", 90,58,59, 50},
- X{"wavy ", 100,58,59, 50},
- X{"black hair, ", 75,59,60, 50},
- X{"brown hair, ", 100,59,60, 50},
- X{"a one foot beard, ", 25,60,61, 50},
- X{"a two foot beard, ", 60,60,61, 51},
- X{"a three foot beard, ", 90,60,61, 53},
- X{"a four foot beard, ", 100,60,61, 55},
- X{"and a dark complexion.", 100,61, 0, 50},
- X{"You have slime green eyes, ", 60,62,63, 50},
- X{"You have puke yellow eyes, ", 85,62,63, 50},
- X{"You have blue-bloodshot eyes, ", 99,62,63, 50},
- X{"You have glowing red eyes, ", 100,62,63, 55},
- X{"dirty ", 33,63,64, 50},
- X{"mangy ", 66,63,64, 50},
- X{"oily ", 100,63,64, 50},
- X{"sea-weed green hair, ", 33,64,65, 50},
- X{"bright red hair, ", 66,64,65, 50},
- X{"dark purple hair, ", 100,64,65, 50},
- X{"and green ", 25,65,66, 50},
- X{"and blue ", 50,65,66, 50},
- X{"and white ", 75,65,66, 50},
- X{"and black ", 100,65,66, 50},
- X{"ulcerous skin.", 33,66, 0, 50},
- X{"scabby skin.", 66,66, 0, 50},
- X{"leprous skin.", 100,66, 0, 50}
- X};
- X#endif
- X
- X/* Classes. */
- Xclass_type class[MAX_CLASS] = {
- X/* HP Dis Src Stl Fos bth btb sve S I W D Co Ch Spell Exp spl */
- X{"Warrior",9, 25, 14, 1, 38, 70, 55, 18, 5,-2,-2, 2, 2,-1, NONE, 0, 0},
- X{"Mage", 0, 30, 16, 2, 20, 34, 20, 36,-5, 3, 0, 1,-2, 1, MAGE, 30, 1},
- X{"Priest", 2, 25, 16, 2, 32, 48, 35, 30,-3,-3, 3,-1, 0, 2, PRIEST, 20, 1},
- X{"Rogue", 6, 45, 32, 5, 16, 60, 66, 30, 2, 1,-2, 3, 1,-1, MAGE, 0, 5},
- X{"Ranger", 4, 30, 24, 3, 24, 56, 72, 30, 2, 2, 0, 1, 1, 1, MAGE, 40, 3},
- X{"Paladin",6, 20, 12, 1, 38, 68, 40, 24, 3,-3, 1, 0, 2, 2, PRIEST, 35, 1}
- X};
- X
- X/* making it 16 bits wastes a little space, but saves much signed/unsigned
- X headaches in its use */
- X/* CLA_MISC_HIT is identical to CLA_SAVE, which takes advantage of
- X the fact that the save values are independent of the class */
- Xint16 class_level_adj[MAX_CLASS][MAX_LEV_ADJ] = {
- X/* bth bthb device disarm save/misc hit */
- X/* Warrior */ { 4, 4, 2, 2, 3 },
- X/* Mage */ { 2, 2, 4, 3, 3 },
- X/* Priest */ { 2, 2, 4, 3, 3 },
- X/* Rogue */ { 3, 4, 3, 4, 3 },
- X/* Ranger */ { 3, 4, 3, 3, 3 },
- X/* Paladin */ { 3, 3, 3, 2, 3 }
- X};
- X
- Xint32u spell_learned = 0; /* bit mask of spells learned */
- Xint32u spell_worked = 0; /* bit mask of spells tried and worked */
- Xint32u spell_forgotten = 0; /* bit mask of spells learned but forgotten */
- Xint8u spell_order[32]; /* order spells learned/remembered/forgotten */
- X
- X/* Warriors don't have spells, so there is no entry for them. Note that
- X this means you must always subtract one from the py.misc.pclass before
- X indexing into magic_spell[]. */
- X#ifdef MACGAME
- Xspell_type (*magic_spell)[31];
- X#else
- Xspell_type magic_spell[MAX_CLASS-1][31] = {
- X { /* Mage */
- X { 1, 1, 22, 1},
- X { 1, 1, 23, 1},
- X { 1, 2, 24, 1},
- X { 1, 2, 26, 1},
- X { 3, 3, 25, 2},
- X { 3, 3, 25, 1},
- X { 3, 3, 27, 2},
- X { 3, 4, 30, 1},
- X { 5, 4, 30, 6},
- X { 5, 5, 30, 8},
- X { 5, 5, 30, 5},
- X { 5, 5, 35, 6},
- X { 7, 6, 35, 9},
- X { 7, 6, 50, 10},
- X { 7, 6, 40, 12},
- X { 9, 7, 44, 19},
- X { 9, 7, 45, 19},
- X { 9, 7, 75, 22},
- X { 9, 7, 45, 19},
- X { 11, 7, 45, 25},
- X { 11, 7, 99, 19},
- X { 13, 7, 50, 22},
- X { 15, 9, 50, 25},
- X { 17, 9, 50, 31},
- X { 19, 12, 55, 38},
- X { 21, 12, 90, 44},
- X { 23, 12, 60, 50},
- X { 25, 12, 65, 63},
- X { 29, 18, 65, 88},
- X { 33, 21, 80, 125},
- X { 37, 25, 95, 200}
- X },
- X { /* Priest */
- X { 1, 1, 10, 1},
- X { 1, 2, 15, 1},
- X { 1, 2, 20, 1},
- X { 1, 2, 25, 1},
- X { 3, 2, 25, 1},
- X { 3, 3, 27, 2},
- X { 3, 3, 27, 2},
- X { 3, 3, 28, 3},
- X { 5, 4, 29, 4},
- X { 5, 4, 30, 5},
- X { 5, 4, 32, 5},
- X { 5, 5, 34, 5},
- X { 7, 5, 36, 6},
- X { 7, 5, 38, 7},
- X { 7, 6, 38, 9},
- X { 7, 7, 38, 9},
- X { 9, 6, 38, 10},
- X { 9, 7, 38, 10},
- X { 9, 7, 40, 10},
- X { 11, 8, 42, 10},
- X { 11, 8, 42, 12},
- X { 11, 9, 55, 15},
- X { 13, 10, 45, 15},
- X { 13, 11, 45, 16},
- X { 15, 12, 50, 20},
- X { 15, 14, 50, 22},
- X { 17, 14, 55, 32},
- X { 21, 16, 60, 38},
- X { 25, 20, 70, 75},
- X { 33, 24, 90, 125},
- X { 39, 32, 99, 200}
- X },
- X { /* Rogue */
- X { 99, 99, 0, 0},
- X { 5, 1, 50, 1},
- X { 7, 2, 55, 1},
- X { 9, 3, 60, 2},
- X { 11, 4, 65, 2},
- X { 13, 5, 70, 3},
- X { 99, 99, 0, 0},
- X { 15, 6, 75, 3},
- X { 99, 99, 0, 0},
- X { 17, 7, 80, 4},
- X { 19, 8, 85, 5},
- X { 21, 9, 90, 6},
- X { 99, 99, 0, 0},
- X { 23, 10, 95, 7},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 25, 12, 95, 9},
- X { 27, 15, 99, 11},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 29, 18, 99, 19},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X { 99, 99, 0, 0},
- X },
- X { /* Ranger */
- X { 3, 1, 30, 1},
- X { 3, 2, 35, 2},
- X { 3, 2, 35, 2},
- X { 5, 3, 35, 2},
- X { 5, 3, 40, 2},
- X { 5, 4, 45, 3},
- X { 7, 5, 40, 6},
- X { 7, 6, 40, 5},
- X { 9, 7, 40, 7},
- X { 9, 8, 45, 8},
- X { 11, 8, 40, 10},
- X { 11, 9, 45, 10},
- X { 13, 10, 45, 12},
- X { 13, 11, 55, 13},
- X { 15, 12, 50, 15},
- X { 15, 13, 50, 15},
- X { 17, 17, 55, 15},
- X { 17, 17, 90, 17},
- X { 21, 17, 55, 17},
- X { 21, 19, 60, 18},
- X { 23, 25, 95, 20},
- X { 23, 20, 60, 20},
- X { 25, 20, 60, 20},
- X { 25, 21, 65, 20},
- X { 27, 21, 65, 22},
- X { 29, 23, 95, 23},
- X { 31, 25, 70, 25},
- X { 33, 25, 75, 38},
- X { 35, 25, 80, 50},
- X { 37, 30, 95, 100},
- X { 99, 99, 0, 0}
- X },
- X { /* Paladin */
- X { 1, 1, 30, 1},
- X { 2, 2, 35, 2},
- X { 3, 3, 35, 3},
- X { 5, 3, 35, 5},
- X { 5, 4, 35, 5},
- X { 7, 5, 40, 6},
- X { 7, 5, 40, 6},
- X { 9, 7, 40, 7},
- X { 9, 7, 40, 8},
- X { 9, 8, 40, 8},
- X { 11, 9, 40, 10},
- X { 11, 10, 45, 10},
- X { 11, 10, 45, 10},
- X { 13, 10, 45, 12},
- X { 13, 11, 45, 13},
- X { 15, 13, 45, 15},
- X { 15, 15, 50, 15},
- X { 17, 15, 50, 17},
- X { 17, 15, 50, 18},
- X { 19, 15, 50, 19},
- X { 19, 15, 50, 19},
- X { 21, 17, 50, 20},
- X { 23, 17, 50, 20},
- X { 25, 20, 50, 20},
- X { 27, 21, 50, 22},
- X { 29, 22, 50, 24},
- X { 31, 24, 60, 25},
- X { 33, 28, 60, 31},
- X { 35, 32, 70, 38},
- X { 37, 36, 90, 50},
- X { 39, 38, 95, 100}
- X }
- X };
- X#endif
- X
- Xchar *spell_names[62] = {
- X /* Mage Spells */
- X "Magic Missile", "Detect Monsters", "Phase Door", "Light Area",
- X "Cure Light Wounds", "Find Hidden Traps/Doors", "Stinking Cloud",
- X "Confusion", "Lightning Bolt", "Trap/Door Destruction", "Sleep I",
- X "Cure Poison", "Teleport Self", "Remove Curse", "Frost Bolt",
- X "Turn Stone to Mud", "Create Food", "Recharge Item I", "Sleep II",
- X "Polymorph Other", "Identify", "Sleep III", "Fire Bolt", "Slow Monster",
- X "Frost Ball", "Recharge Item II", "Teleport Other", "Haste Self",
- X "Fire Ball", "Word of Destruction", "Genocide",
- X /* Priest Spells, start at index 31 */
- X "Detect Evil", "Cure Light Wounds", "Bless", "Remove Fear", "Call Light",
- X "Find Traps", "Detect Doors/Stairs", "Slow Poison", "Blind Creature",
- X "Portal", "Cure Medium Wounds", "Chant", "Sanctuary", "Create Food",
- X "Remove Curse", "Resist Heat and Cold", "Neutralize Poison",
- X "Orb of Draining", "Cure Serious Wounds", "Sense Invisible",
- X "Protection from Evil", "Earthquake", "Sense Surroundings",
- X "Cure Critical Wounds", "Turn Undead", "Prayer", "Dispel Undead",
- X "Heal", "Dispel Evil", "Glyph of Warding", "Holy Word"
- X};
- X
- X/* Each type of character starts out with a few provisions. */
- X/* Note that the entries refer to elements of the object_list[] array*/
- X/* 344 = Food Ration, 365 = Wooden Torch, 123 = Cloak, 30 = Stiletto,
- X 103 = Soft Leather Armor, 318 = Beginners-Majik, 322 = Beginners Handbook */
- Xint16u player_init[MAX_CLASS][5] = {
- X { 344, 365, 123, 30, 103}, /* Warrior */
- X { 344, 365, 123, 30, 318}, /* Mage */
- X { 344, 365, 123, 30, 322}, /* Priest */
- X { 344, 365, 30, 103, 318}, /* Rogue */
- X { 344, 365, 123, 30, 318}, /* Ranger */
- X { 344, 365, 123, 30, 322} /* Paladin */
- X};
- END_OF_FILE
- if test 19680 -ne `wc -c <'source/player.c'`; then
- echo shar: \"'source/player.c'\" unpacked with wrong size!
- fi
- # end of 'source/player.c'
- fi
- echo shar: End of archive 2 \(of 3\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 3 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 3 archives.
- echo "Please read the file NOTES01."
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-